专利摘要:
拡散ディザリングは、1つ以上のシフト、加算、および/または、減算の演算を有する、1組の拡散フィルタ重みを適用することによって、効率的に実行できる。既存の拡散フィルタを、2進分数で近似することができ、これによって、フィルタ重みを適用する際の除算演算を、ビットシフト演算で実行できるようにする。1組のフィルタ重みと、ピクセル誤差との積を計算するためのアルゴリズムが識別され、アルゴリズムは、1つ以上のシフト、加算、または、減算の演算を使用して、計算を実行する。演算の組み合わせの網羅的なサーチを行って、積を計算するための効率的なアルゴリズムを見つけることができる。
公开号:JP2011507409A
申请号:JP2010538185
申请日:2008-12-12
公开日:2011-03-03
发明作者:レズニク、ユリー
申请人:クゥアルコム・インコーポレイテッドQualcomm Incorporated;
IPC主号:H04N1-405
专利说明:

[0001] ここでの主題は、一般的に画像処理に関連する。より詳細には、主題は、その重みが2進分数であるフィルタを使用して、効率的に拡散ディザリングを実行することと、1つ以上のシフト、加算、または、減算演算を使用して、重みを適用することとに関連する。]
背景

[0002] 有限のカラーパレットを有するシステム中で、画像が表現されることになるとき、オリジナル画像のカラーを表現するために、パレットからカラーが選択される。有限なパレットはギャップを持つので、オリジナル画像の本当のカラーは、パレット中のどのカラーにも、正確には対応していないかもしれず、選択されたカラーは、本当の色を、パレット中の近似の色に丸めることによって、選ばれるかもしれない。選択されたカラーが、オリジナル画像の本当のカラーとは異なっているという点で、丸め誤差が認識される。拡散ディザリングを使用して、あるピクセル中の誤差を、隣接または近隣のピクセルへと分配でき、これによって、アーティファクト、または、そうでなければ丸め誤差によってもたらされるであろう、他の歪みを減少させる。]
[0003] 拡散ディザリングは、あるピクセルに対する丸め誤差に対して、フィルタを適用することと、フィルタにしたがって、誤差を分配することとによって実行される。フィルタは、重みと呼ばれる、1組の端数を有する。丸め誤差の一部を、他のピクセルに分配するために、フィルタ中のそれぞれの重みは、誤差によって乗算され、結果としての積が、そのカラー値が丸められているピクセルの近隣の特定のピクセルに対して分配される。端数の重みを適用することは、一連の乗算および除算演算、または、浮動小数点算術を使用して、通常は実行され、これは、計算的にコストが高い。]
[0004] 良好な画像結果を生み出すために、さまざまなフィルタが、実験的に決定されてきたが、これらのフィルタの多くが、適用するのが複雑である端数重みを使用していた。例えば、Stuckiフィルタは、その分母が42である端数を使用し、Jarvisフィルタは、その分母が48である端数を使用する。分母が2の累乗であるとき、分子によって誤差を乗算して、次に、高速右ビットシフト演算を使用して、分子によって除算することによって、端数を誤差に適用できる。しかしながら、42および48は、2の累乗ではないので、これらの分母を有する端数を適用することは、機械の除算ロジック、または、浮動小数点乗算のいずれかを使用することを含み、これらの両方は、計算的にコストが高い。さらに、端数中の分子を重みに適用することは、乗算演算を含んでいてもよく、これは、シフト、加算、または、減算の演算ほど効率的ではない。ワイヤレスハンドセット、または、ハンドヘルドコンピュータのような小型の装置上では、これらのコストの高い演算を使用して、許容可能な速度で、拡散ディザリングを実行するための十分な計算パワーがないかもしれない。]
概要

[0005] 拡散ディザリングは、1つ以上のシフト、加算、または、減算の演算を使用して、ピクセル誤差に対して、拡散フィルタ重みを適用することによって、効率的に実行できる。その端数が2進分数である、すなわち、その分母が2の累乗である端数である、フィルタを選択できる。さらに、一連の左シフト、加算、および/または、減算の演算を使用して、ピクセル誤差に対して、端数中の分子を適用するアルゴリズムを識別できる。左シフト、加算、および/または、減算の演算を使用して、ピクセル誤差によって、分子を乗算し、右シフトを使用して、結果を2の累乗の分母によって除算して、誤差に対して、重みを効率的に適用することを可能にする。]
[0006] 2進分数である重みを有するフィルタが、知られているフィルタ中の重みを近似する2進分数を使用することによって作成できる。別の例として、2つ以上の知られているフィルタが、それぞれのフィルタの所定の位置における重みの算術平均をとることによって結合でき、次に、2進分数を使用して、結果としての平均を近似してもよい。これらの技術、または、他の技術を使用して、その重みが2進分数であるフィルタを作成できる。]
[0007] フィルタ重み中の分子を、ピクセル誤差に対して適用することによって、アルゴリズムを作成または識別することができる、アルゴリズムは、1つ以上のシフト、加算、および/または、減算の演算を使用して、重みを適用する。アルゴリズムを作成する1つの方法は、ベース値を持つディクショナリとともに開始し、次に、ディクショナリが、フィルタ中の分子として使用されるすべての係数に到達できる演算を含むまで、ディクショナリに異なるシフト、加算、および、減算の演算を加えることである。次に、ディクショナリのコンテンツは、アルゴリズムとして保存される。同一の組の係数を発生させる異なるアルゴリズムが作成できる。これらのアルゴリズムは、効率性に関して比較されることができ、特定の効率性基準を満たすアルゴリズムを使用して、誤差値に対してフィルタ重みを適用するプロセスを実現できる。]
[0008] この概要は、以下で詳細な説明においてさらに開示する概念の、簡潔化した形態で、概念の選択を紹介するように提供する。この概要は、特許請求の範囲の主題のキーとなる特徴、もしくは、本質的な特徴を識別することを意図しておらず、または、特許請求の範囲の主題の範囲を制限するのに使用されることを意図していない。]
図面の簡単な説明

[0009] 図1は、ディザリングフィルタを見つけて、適用する例示的なプロセスのフロー図である。
図2は、2進分数を計算して、フィルタ中の重みを近似する例示的なプロセスのフロー図である。
図3は、例示的なアルゴリズムにおける従属性のグラフである。
図4は、例示的な配列のブロック図である。
図5は、図4の配列におけるエレメントとして使用されてもよい例示的なデータ構造のブロック図である。
図6は、アルゴリズムを発生させる例示的なプロセスのフロー図である。
図7は、例示的なワイヤレスデバイス、または、端末の構成のブロック図である。] 図1 図2 図3 図4 図5 図6 図7
発明の詳細な説明

[0010] デジタルイメージングにおいて、カラーは、有限カラーパレットへと量子化される。例えば、イメージングスキームが、あるピクセルのカラーを表現するのに8ビットを割り当てる場合、ピクセルは、256(28)の異なるカラーのうちの1つをとることができるが、個別の256カラーの間の中間値をとることはない。ハンドヘルドコンピュータ、および、ワイヤレス電話機のような、多くの電子的デバイスは、小さいカラーパレットを採用している。いくつかのケースにおいて、これらのデバイスは、4ビットのカラー深度(すなわち、カラーパレットのサイズ)を有するイメージングスキームを採用し、これは、あるピクセルにおける、24(=16)の異なるカラーの表現を可能にする。しかしながら、現実の世界の画像は、カラーにおける任意の小さい濃淡または変動を呈する。高解像度デジタル写真でキャプチャされた画像は、量子化されたカラーパレットを持っていてもよいが、表現可能なカラー中の濃淡は、非常に細かくてもよく、画像が表示されることになるプラットフォームよりずっと小さくてもよい。したがって、ソース画像が、現実の世界の画像、または、高カラー深度でキャプチャされた画像であり、ターゲットイメージングシステムが、比較的粗いカラーパレットを有しているとき、カラー値は、パレットの制約内にフィットするように、切り上げられることができ、または、切り捨てることができる。]
[0011] カラーが切り上げられ、または、切り捨てられるとき、誤差が認識される。したがって、イメージングシステムが、整数0から15によって表現される、16のカラーを用いており、特定のピクセルが、ソース画像を正確に表現するために、14.3にセットされるべきであるとしてシステムが決定する場合、システムは、カラーを、14.3から14に切り捨てることができる。この丸めることは、ターゲットピクセルのカラー値が、0.3だけソース画像から異なることをもたらし、したがって、ターゲットピクセル中の誤差は、0.3である。丸めることに対処しようと試みることなく、誤差を無視して、丸められた値を単に受け入れることも可能である。このケースでは、ターゲット画像中のカラーが、0.3だけソース画像中のカラーとは異なるという事実は、情報の損失となる。ターゲット画像の品質に対する期待が低い場合、この情報の損失は受入可能であるかもしれない。しかしながら、いくつかのケースでは、情報の損失は、深刻なことであるかもしれない。例えば、ターゲット画像スキームが、2カラー、すなわち、白黒のカラーパレットを持っており、ソース画像が一様に、51%グレーである場合、丸めることは、ターゲット画像中の各ピクセルが、全体的に黒く見えることをもたらすだろう。いくつかの方法で、丸め誤差に対処することは、遠くから画像を見たときに、画像がグレーに見えるように、いくつかのピクセルを黒にセットし、他のピクセルを白にセットすることを可能にする。]
[0012] 誤差に対処する1つの方法は、拡散ディザリングとして知られている技術である。拡散ディザリングは、ある割合にしたがって、丸め誤差を、隣接または近隣のピクセルに分散させることによって、丸め誤差に対処する。さまざまな拡散ディザリングがあり、これは、良好な結果を生み出すために、実験的に決定されてきた。これらのディザは、調べられているピクセルから誤差を分散させる場所と、どれほどの量において、その誤差が各ピクセルに対して分散されるかに基づいて、記述される。例えば、1つの拡散ディザリング−(作者の名前にちなんで名づけられた)Floyd−Steinbergフィルタは、以下のように記述することができる。]
[0013] 画像は、行ごとに調べられることができ、ここで、各行は、左から右に調べられ、複数の行は、上から下に調べられる。表1中の“*”シンボルは、調べられているピクセルを表す。“*”シンボルのすぐ横の分数は、隣接ピクセルに分配された丸め誤差の比率(すなわち、“重み”)を表す。例えば、“*”におけるピクセルが、14.3であり、14に丸められている場合、そのピクセル中の合計誤差は、0.3である。その誤差の7/16(0.3×7/16=.13125)が、1列右側の同じ行中のピクセルに対して、分配され、誤差の1/16が、1列右側の1列下のピクセルに対して分配される等、“*”(現在の)ピクセル中の全体の誤差が、他のピクセルに分配されるまで行われる。したがって、ターゲット画像中で、所定のピクセルに対するカラー値は、ソース画像中の対応するピクセルのカラーと、近接ピクセル中で、カラー値を丸めることが、どれほど多く発生したかとの両方によって、決定される。各行は、左から右に調べられてもよい。あるいは、行は、蛇行するパターンで、各連続的な行で、左から右と、右から左を交互に、調べられてもよく、このケースでは、表1に示した重みのパターンは、右から左に調べられる行に対して水平に反転される。]
[0014] 効率性の見地から、Floyd−Steinbergフィルタは、重み中の分母が、2の累乗(=24)であるという特性を持つ。(フィルタ中のすべての分数の合計が全部で1になるように、分数における分母(16)は、分子の合計(3+5+1+7=16)である。)コンピューティングデバイスは、2の累乗による除算を効率的に実行でき、なぜならば、ベース2において、2の累乗による除算は、数のバイナリ表現を、除数中の指数に等しいビットの数だけ、右シフトすることによって実行できるためである。したがって、2進数Aを、2nによって除算することになる場合、この演算は、Aを、nビットだけ右シフトすることによって実行することができる。(商における分数の量は、レジスタの最後においてシフトオフされ、破棄される;したがって、この方法による除算は、商を、次の最も低い整数へと切り捨てる。)16(=24)による除算は、例えば、4ビットだけ右シフトすることによって達成されることができ、この右シフトは、通常、レジスタ内で直接実行することができるネイティブ機械命令によって実行される。(この例において、標準的な意味で“右”を使用し、ここで、最小桁のビットは、“右”にあるとして考えられる。しかしながら、数の任意の表現を使用できる。シフトを記述する際の利便性のために、“右”および“左”は、標準的な右および左を指し、ここで、数が、どのように物理的に表現されるかに関わらず、最小桁のビットは、“右”に向かっているとして記述し、最上位ビットは、“左”に向かっているとして記述する。)]
[0015] Floyd−Steinbergディザリングが、(Burkesフィルタ、およびSierra3フィルタのような、何らかの他の知られているフィルタがそうであるように、)2の累乗である除数を使用する一方で、重み中の分母が、2の累乗でない、他のディザリングも考えられてきた。例えば、Stuckiフィルタを表2に示す。]
[0016] より複雑な誤差の分配を用いる、Stuckiフィルタのようなフィルタは、何らかの状況において、Floyd−Steinbergフィルタのような、より簡潔なフィルタより良いディザリング結果を生み出してもよい。しかしながら、計算の複雑さによって、コストは高い。Floyd−Steinbergフィルタにおいてと同様に、Stuckiフィルタ中の重みの合計は、合わせて1になる。フィルタ中の分数中の分子が、合わせて42になるので、各分数における分母は42である。42は、2の累乗でないので、これらの分数を、実際の誤差値に適用することは、42による除算を含み、これは、簡潔なビットの右シフトではなく、除算演算を通して実行される。除算演算が、処理ハードウェア中に組み込まれるか、または、ソフトウェアで実現されるかに関わらず、除算演算は、右シフトより計算的にコストが高い。]
[0017] 右シフト演算を、除算に対して使用できるようにするために、2進分数(または、2進端数)−すなわち、2の累乗である分母を持つ1組の端数−を使用して、フィルタ中の重みを近似することが可能である。拡散ディザリングフィルタ中の重みを近似する技術は、図2に関連して以下で記述する。しかしながら、誤差値に重みを適用することは、除算だけでなく、乗算も含み−すなわち、分子が重みによって乗算され、結果が分母によって除算され、−この乗算演算は、計算における非効率性の別のソースとなりかねない。2の累乗による乗算は、左シフト演算とともに、コストをかけずに実行できるが、2の累乗でない数による乗算は、計算的にコストの高い乗算ロジックを含む。Stuckiフィルタのような、いくつかのフィルタは、2の累乗である分子を持ち、このことは、フィルタ重みを誤差値に適用する乗算ステージを簡潔にする。しかしながら、(Floyd−Steinbergフィルタのような、)いくつかのフィルタは、2の累乗でない重みを持つ。他のケースでは、2の累乗の分子を持つ(Stuckiフィルタのような)フィルタは、2進分数で近似するとき、2の累乗でない分子を持つかもしれない。例えば、Stuckiフィルタを、その分母が64である端数で近似しようとする場合、端数、1/42、2/42、4/42、および、8/42は、2/64、3/64、6/64、および、12/64として近似されるだろう。これらの分子のうちで、2は2の累乗であるが、3、6、および12はそうではない。シフト、加算、および、減算は、計算的にコストが高くない演算である。したがって、一連のシフト、加算、および、減算を使用して、誤差値によって、重み分子を乗算するアルゴリズムを作成することによって、効率性が実現される。] 図2
[0018] ここで、図面を参照して、図1は、プロセス100のステージを示し、ここで、ディザリングフィルタの2進近似が見つけられ、適用される。102において、その重みが2進分数であるフィルタが見つけられる。このようなフィルタを見つけるための1つの方法は、2の累乗を選択し、知られているフィルタ(例えば、Stuckiフィルタ)中の各端数を、その分子が選択された2の累乗である別の端数によって、近似することである。したがって、数64(=26)が選択される場合、フィルタ中の各端数は、その数で乗算できる。オリジナルフィルタ中の端数と、選択された数との積は、オリジナルの端数を近似する新しい端数の分子を与えるだろう。例えば、Stuckiフィルタは、端数8/42を含む。64によって乗算されたその端数は、512/42に等しく、これは、最も近い整数に丸められ、12である。したがって、12は、2進分数12/64(=0.1875)中の分子である。オリジナルの端数8/42は、ほぼ0.190476に等しく、したがって、12/64は、オリジナルの端数の理にかなった近似である。より高い2の累乗を分母として使用することと、その2の累乗に基づいて、端数の近似を発生させることによって、より正確な近似を得ることができる。1つの例において、何らかの範囲−例えば、22から210におけるすべての2の累乗に基づいて、フィルタ中で端数を近似するように、プログラムを書くことができる。加えて、上記の例は、Stuckiフィルタのような、知られているフィルタ中の端数を近似する一方で、近似するための端数は、2つ以上の知られているフィルタの平均を使用することによってのような、他の何らかの方法で発生させることができる。] 図1
[0019] 例えば、Jarvis氏、Judice氏、および、Ninke氏によって作成されたフィルタ(“Jarvis−Judice−Ninkeフィルタ”、または、“Jarvisフィルタ”)を、表3に示した。]
[0020] このフィルタは、Stuckiフィルタと同じ位置において重みを持つが、重みは、異なる端数である。これらのフィルタの重みの間の中間点をとることができ、結果としての端数を、2進分数で近似することになる重みとして使用できる。(例えば、“*”ピクセルの右のピクセルに対して、その位置において使用するStuckiフィルタおよびJarvisフィルタの端数の算術平均−[(7/48)+(8/42)÷2=113/672]−を使用でき、次に、この新しい端数を2進分数で近似する。)
104において、加算、減算、および、左シフトのシーケンスとして、重み中の分子を計算するためのアルゴリズムを見つける。このようなアルゴリズムを見つけるための例示的なプロセスを、以下で図4−6と表5に関連して説明する。] 図4
[0021] 106において、あるピクセルに関係するカラー誤差を計算する。したがって、あるピクセルのオリジナルのカラーが、利用可能なカラーパレット中のカラーへと丸められている場合、丸め誤差が発生する。この丸め誤差は、106において計算される。]
[0022] 108において、104において見つけられたアルゴリズムを、拡散ディザリングプロセスにおいて使用して、1つのピクセルから他のピクセルへと誤差を分配する。したがって、Δが、ソース画像中のカラー値を、利用可能なカラーパレット中のカラー値へと丸めることに関係する誤差である場合、そして、Wkが、その誤差に適用されることになるフィルタからの2進分数中の分子である場合、一連の左シフト、加算、および、減算として、Wk・Δを計算するためのアルゴリズムが、その積を見つけるために適用される。]
[0023] 110において、累積された誤差値が、フィルタにおいて使用される分母によって除算される。したがって、フィルタは、その分母が2の累乗である端数を使用するように選ばれているので、この除算は、右シフト演算を使用して実行できる。]
[0024] 112において、110において計算された値が、適用されているフィルタにしたがって、ピクセルに分配される。]
[0025] 重みを計算するためのアルゴリズムを見つけることは、計算集約的である。したがって、ステージ102および104は、より低い計算パワーを備える機械上で実行される効率的なアルゴリズムを発生させるために、通常は、高い計算パワーを備える機械上で実行されるだろう。アルゴリズムが発生された後、ステージ106−112は、発生されたアルゴリズムを使用して、異なる機械(例えば、ワイヤレス電話機、ハンドヘルドコンピュータ等)上で実行されることができる。しかしながら、ステージ102−112は、何らかの環境において、および、何らかのタイプの機械上で実行されることができる。]
[0026] 図2は、フィルタ中で重みを近似する2進分数を計算する例示的なプロセス200を示す。プロセス200は、図1中のステージ102を実行するための例示的な方法である。近似されることになるフィルタは、既存のフィルタ(例えば、Stuckiフィルタ、Jarvisフィルタ等)であってもよく、既存のフィルタの平均(例えば、Stuckiフィルタ、Jarvisフィルタの重みの間の中間点)であってもよく、または、何らかの方法で選ぶことができてもよい。プロセス200は、範囲2minから2max中の2の累乗である分子を持つフィルタの近似を発生させる。プロセス200において、a、b、および、kは、変数名である。202において、kは、最小値(min)に等しくセットされる。例えば、min=2であり、max=10である場合、フィルタ重みの2進近似の計算は、その分母が22(=4)に等しい重みで開始することになり、一連の4,8,16,・・・,1024を通して続くだろう。204において、aがフィルタの第1の重みに等しくセットされる(例えば、Stuckiフィルタにおける8/24)。206において、bが、a×2kに等しくセットされ、次に、最も近い整数へと丸められる。最も近い整数へと丸めるための1つの方法は、a×2kに0.5を加算し、次に、フロア関数を使用して、次の最も低い整数へと端数量を切り詰めることである。しかしながら、何らかの丸めメカニズムを使用してもよい。] 図1 図2
[0027] 208において、bの値が出力される。1つの例において、bの値は、現在の分母と、それが近似する比とともに出力される。したがって、プロセス200が、現在、分母26=64で近似を計算している場合(すなわち、k=6である場合)、そして、近似されている端数が、8/42である場合、bは、206において計算されるように、12に等しくなり、したがって、“12/64は、8/42におよそ等しい”のような情報が、提供されることができる。しかしながら、bは、何らかの方法で208において出力されることができる。]
[0028] 210において、フィルタ中に別の重みがあるか否かが決定される。別の重みがある場合、aは、次の重みに等しくセットされ、プロセス200は206に戻って、次の重みの近似を計算する。210において、フィルタ中に別の重みがないとして決定される場合、(214において、)kはインクリメントされる。(216において決定されるように、)kが最大値(max)より大きい場合、プロセス200は終了する。そうではない場合、プロセスは204に戻って、次のkの値に基づいて、フィルタの近似を計算し始める。]
[0029] いったん、その重みが2進分数であるフィルタが見つかると、アルゴリズムが作成されて、左シフト、加算、および、減算の演算のシーケンスとして、端数を適用する。例えば、表4は、その重みが2進分数である例示的なフィルタを示す。]
[0030] 表4において、分子は、1、4、6、および11である。この分母、64が2の累乗であるように選ばれたので、6ビットだけ(64=26)右シフトすることによって、除算が実行できる。したがって、これらの比を適用する際に効率的であるアルゴリズムを見つけるために、左シフト、加算、および、減算の演算を使用して、分子によって、誤差値を乗算するための方法に対するサーチが行われる。例えば、wnが、左シフト、加算、および、減算の演算を使用して、達成できる特定の値を表現する場合、以下は、1、4、6、および11による乗算のためのアルゴリズムの一例である(ここで、“<<”は、左シフト演算を表し、したがって、x<<yは、yビットだけ左シフトされたxを意味する)。
W0 =1;
W1 =W0 << 2; (=4)
W2 =W0 + W1; (=5)
W3 =W0 + W2; (=6)
W4 =W2 + W3; (=11)
したがって、W0の開始値があるとすると、このアルゴリズムは、左シフトと加算の演算を使用して、4、5、6、および、11によって、どのように乗算するかを示す。このケースでは、5は、分子における値のうちの1つではないが、これは、他の値を計算するのに使用されることができる中間値である(例えば、W2=5は、W4=11を計算するための数式中で出現する)。したがって、数を、例えば、6(=W3)によって乗算するために、W0を、6によって乗算されることになる数に等しくセットすることができ、次に、上記の数式を、以下のように適用することができる:
W3 =W0 +W2
W3 =W0 +(W0 +W1)
W3 =W0 +(W0 +(W0 <<2))
したがって、例えば、9×6を乗算するために、W0は、9に等しくセットされ、W3に対する解は以下のような積である:
W3 =9+(9+(9<<2))
W3 =9+(9+(36))
W3 =54
これは、9×6に対する解である。解は、2つの加算演算と、1つのシフト演算とを使用して計算される。]
[0031] アルゴリズムの複雑さは、その従属性のグラフとしてモデル化することができる。図3は、上記のアルゴリズムにおける従属性のグラフを示す。図3のグラフは、係数W0からW4に対応する、ノード300、301、302、303、および、304を持つ。グラフは、各ノードの、他のノードへの従属性を示す。したがって、ノード300(W0)は、システムのベース値であり、他の何らかのノードの値からの計算に依拠していない。(“NOP”は、“演算なし(no operation)”を意味し、ベースノード300は、他のノードでの演算を実行することなく発生されることを示している。)ノード301(W1)は、ノード300に依存しており、ノード300の値に、左シフト演算(“SHL”)を実行することによって、取得される。ノード302(W2)は、ノード301の値とノード300の値に、加算演算(“ADD”)を実行することによって、取得される。このように、ノード304まで同様である。グラフから、グラフ中の最も中心から離れたノードであるノード304が、ノード300−303の値に、直接または間接的に依存していることが分かる。したがって、ノード304における値は、ノード301、302、および、303において、値を計算(1つのシフトと2つの加算を含む)することと、次に、ノード302と303をオペランドとして、追加の加算演算を実行することによって、取得される。したがって、アルゴリズム中の最も複雑な計算は、3つの加算演算と、1つのシフト演算を含む。] 図3
[0032] アルゴリズムを見つけるために、ある者は、計算できることを望む係数、例えば、上記のフィルタにおける分子1、4、6、および11、から開始してもよい。次に、これらの係数を導く計算に対するサーチを実行する。係数のフルセットに対する計算がみつけられた後、これらの計算は、アルゴリズムとして集合される。アルゴリズムの複雑さが、これらの係数を生み出す、他の知られているアルゴリズムに対して比較される。複雑さは、例えば、係数のうちの1つに到達するために使用される最長パス中に、どれほど多くの演算があるかに基づいて、決定されてもよい。あるいは、複雑さは、加算演算、もしくは、シフト演算の数における個別の制限、または、シフトされることになるビットの数への制限のような、より特定化された基準に基づいていてもよい。各アルゴリズムは、捜される係数のフルセットと、潜在的にこれらの計算において使用される中間値を生み出すための公式を含んでいてもよい(上でW0からW4に対して記述したもののような)1組の計算である。]
[0033] アルゴリズムをサーチするプロセスの一部として、“ディクショナリ”が作成され、ディクショナリは、さまざまな値を発生させるのに使用できる演算のカレントスタックを記憶する。ディクショナリは、1のベース値から開始し、拡張プロセスを使用して、ディクショナリに対して演算を加えて、捜されている係数を生み出す。拡張プロセスの議論に移る前に、ディクショナリとそのデータ構造を最初に説明する。ディクショナリは、配列として表現でき、配列中の各エレメントは、特定の値を含み、現在の値に到達するように、ディクショナリ中の他の値の関数として実行される演算もまた含む。図4は、配列450を示し、これは複数のエレメントを含む。図4に示した配列の例示的な状態において、配列450は、上に記述した例における係数W0、W1、および、W2を表す、3つのエレメント400、401、および402を有する。] 図4
[0034] エレメント400は、係数W0に対応する。これは、演算“NOP”を実行することによって取得される1の値を持つ。(“NOP”は、“演算なし(no operation)”を表し、すなわち、W0は他の値がそれに基づくベース値であるので、他のエレメント上に演算を実行することなく、W0が取得されることを示している。)エレメント400において、“lpl”は、そのエレメントによって表現される係数を導く“最も長いパス長”を表し、これは、エレメント400に対してゼロに等しく、これは、W0はシステムのベース値であり、それに到達するのに何のパスも使用されないためである。“nconn”は、他のエレメントに対するそのエレメントからの“接続の数”を表す。引き続いて説明するように、エレメント400を使用して、エレメント401および402を計算し、したがって、エレメント400中のnconnは、2に等しく、エレメント400に依拠する、他の2つのエレメントがあるという事実を表す。(図3に示したグラフにおいて、あるノードの“nconn”値は、そのノードから導かれるエッジの数に対応する。)
エレメント401は、係数W1に対応し、4の値を持つ。エレメント401における“op”フィールドは、“SHL”(“左シフト”)に等しい。エレメント401は、“i=0”の値を持ち、配列450中の0番目のエレメント(エレメント400)が、演算のオペランドであることを意味している。エレメント401はまた、値“s=2”を持ち、エレメント401の値を生み出すために、オペランドの値がシフトされることになるビット数を表している。エレメント401は、1に等しい“lpl”値を持ち、ベースエレメント400から、エレメント401に対して導く演算パスの長さは1、すなわち、1つのシフト演算であることを表している。エレメント401はまた、1に等しい“nconn”値を持ち、エレメント401の値に依拠する他の1つのエレメントがあることを表している。(この例では、エレメント402はエレメント401に依拠している。)
エレメント402は、係数W2に対応し、5の値を持つ。エレメント402における“op”フィールドは、“ADD”(他の2つのエレメントの間の加算)に等しい。エレメント402は、“i=0”、および“j=1”の値を持ち、配列450中の0番目と1番目のエレメント(エレメント400と401)が、“ADD”演算のオペランドであることを意味している。エレメント402の値は、エレメント400と401の値を加算することによって、取得される。エレメント402は、2に等しい“lpl”値を持ち、ベースエレメント400から、エレメント402に到達するのに、2つの演算が使用されることを表している。(すなわち、エレメント400からエレメント401を計算するのに使用されるSHL演算と、エレメント400と401の値からエレメント402を計算するのに使用されるADD演算とである。)エレメント402は、0に等しい“nconn”値を持ち、エレメント402が、グラフ中のリーフであることを意味し、それらの値を計算するために、エレメント402において計算された値に依拠する、他の何のエレメントもないことを表している。] 図3
[0035] 図5は、図4の配列450中のエレメントに対して使用されてもよい例示的なデータ構造500を示す。データ構造500は、値フィールド502、演算子フィールド504、第1のインデックスフィールド506、第2のインデックスフィールド508、シフト演算においてシフトするビットの数を記憶するフィールド510、最も長いパス長(“lpl”)値を記憶するフィールド512、および、接続の数(“nconn”)値を記憶するフィールド514を含む。データ構造500の各インスタンスは、係数を表し、これは、フィルタを実現するのにサーチされる係数であってもよく、中間値であってもよい。] 図4 図5
[0036] フィールド502は、エレメントによって表現される係数の値を記憶する。例えば、エレメントが、ベース係数W0を表す場合、そのエレメント中の値は1であるだろう。]
[0037] フィールド504は、他のエレメントからエレメント値を達成するのに使用される演算子を記憶する。例えば、フィールド504は、“SHL”(左シフト)、“ADD”(加算)、“SUB”(減算)、および、“NOP”(演算なし)のような値を記憶できる。これらの演算は、例えば、異なる整数によってデータ構造500中で表現されてもよく、象徴的に、名称“SHL”、“ADD”、“SUB”、および、“NOP”に関係付けられることができる。NOPは、プレースホルダー演算であり、これは、他の何らかのエレメント上での演算を実行することなく、そのエレメントが導出されることを意味する。NOP演算は、配列中の第1のエレメントに対して使用され、これは、W0(=1)のベース値であり、ここから、配列中の他のエレメントが、直接的に、または、間接的に導出される。]
[0038] フィールド506および508は、所定の演算のオペランドのインデックスを、ディクショナリ配列へと記憶する。例えば、ADDおよびSUB演算は、2つのオペランドをとり、フィールド506および508の両方は、ADDまたはSUB演算に対して規定された値を持つだろう。フィールド506および508が、値mおよびnを持ち、フィールド504は、値ADDを持つ場合、このシナリオは、配列中の現在のエレメントは、m番目のエレメントと、n番目のエレメントを加算することによって計算されることを意味する。]
[0039] SHL演算は、1つのオペランドをとり、したがって、フィールド504が値SHLを持つケースでは、フィールド506は、オペランドのインデックスを記憶でき、フィールド508は、ブランクのままにされてもよい。フィールド504が値SHLを持つケースでは、シフトされることになるビット数は、フィールド510中に記憶される。したがって、フィールド504が値SHLを持ち、フィールド506が値mを持ち、フィールド510が値nを持つ場合、このシナリオは、配列中の現在のエレメントが、m番目のエレメントの値を、配列nビットだけ左シフトすることによって計算されることを意味する。]
[0040] フィールド512は、ベースエレメント(W0)からエレメントに到達するのに係るパスの長さを記憶する。このフィールドは、上で説明した“lpl”値を保持する。したがって、現在のエレメントがベースエレメントである場合、W0からW0に到達するのに何の演算もとられないので、フィールド512の値はゼロである。他のエレメントに対して、フィールド512の値は、エレメントのオペランド中の“lpl”値よりも1大きくセットされる。(または、単一のオペランドを持つSHL演算のケースでは、エレメントのオペランド中の“lpl”値よりも1大きくセットされる。)
フィールド514は、エレメントが持つ外向きの接続の数を記憶し、すなわち、現在のエレメントをオペランドとして使用する、他のエレメントの数を記憶する。このフィールドは、上で説明した“nconn”値であり、アルゴリズムに対するサーチの間に、ブックキーピングのために使用されて、リーフ、すなわち、グラフ中の“子を持たないノード”を表すエレメントを決定する。]
[0041] データ構造500のインスタンスの配列を含むディクショナリは、到達可能な、知られている係数を表す。配列が、サーチされているすべての係数を持つエレメントを含むとき、配列の内容は、これらの係数を発生させるアルゴリズムを含む。したがって、これらの係数を発生させるアルゴリズムを見つけるために、配列中のゼロ番目のエレメントを、1の値を持つように、セットすることによって、配列がベースエレメント(W0)で初期化される。次に、演算のさまざまな組み合わせを通して到達されるさまざまな値で、配列が埋められる。配列が、サーチされている係数を含む状態に到達したとき、配列のコンテンツがキャプチャされる。キャプチャされたコンテンツは、アルゴリズムとして保存できる。または、アルゴリズムの効率性が、従前に発見されたアルゴリズムに比較でき、そのアルゴリズムが従前のアルゴリズムより効率的である場合、そのアルゴリズムが保存できる。1つ以上のアルゴリズムが発生された後、ディザリングフィルタ中の係数を計算するために、アルゴリズムのうちの1つを選択できる。]
[0042] 図6は、アルゴリズムを発生させる例示的なプロセスのフロー図である。602において、発生されることになる1組の係数が受け取られる。604において、ディクショナリが、その値が1である、ベースエントリ(W0)を持つように初期化され、そのオペランドとしてディクショナリ中に他のエレメントを持たない。606において、リカージョンを実行して、ディクショナリに対する新しい値と演算を発生させ、602において受信された係数を発生させるアルゴリズムを保存する。ディクショナリを埋める再帰的方法の例は、以下に擬似コードにおいて説明する。608において、リカージョンによって発見されたアルゴリズムが出力される。] 図6
[0043] 表5は、ディクショナリに対する新しい値と演算を発生させるのに使用できる、例示的なリカージョンの擬似コードを示す。例示的なリカージョンは、ディクショナリ上で、あるパラメータで、演算のすべての組み合わせを試行する点で、“網羅的な”サーチとして見られることができるサーチを実行する。しかしながら、アルゴリズムに対するサーチは、以下に示すアルゴリズムによって実行される必要はなく、このような方法が“網羅的”であるか否かに関わらず、何らかの方法で実行されることができる。]
[0044] [表5]
Function expand(){
/* try shift */
for each entry i in the dictionary{
for k = 1 to (max bit length - msb _ position _ of(i.value)) {
try adding new entries that shift the i.value to the left by k bits;
if entry duplicates a value that is already in the dictionary then
remove the top entry;
else if the dictionary still does not have all the values sought then{
expand(); // continue trying to find the next value
remove the top entry; // unwind the stack after returning from the recursion

else{ // dictionary has all the factors being sought
if the current algorithm is at least as efficient as the saved algorithms then{
save the current contents of the dictionary as a new algorithm;
remove the top entry;




/* try adds*/
for each pair (i,j) of entries in the dictionary, where i ≠ j{
try adding new entries that are the sum of i.value + j. value;
if entry duplicates a value that is already in the dictionary then
remove the top entry;
else if the dictionary still does not have all the values sought then{
expand(); // continue trying to find the next value
remove the top entry; // unwind the stack after returning from the recursion
}
else{ // dictionary has all the factors being sought
if the current algorithm is at least as efficient as the saved algorithms then{
save the current dictionary as a new algorithm;
remove the top entry;



/* try subtracts */
// Similar to "try adds", but tries to add element that subtract one existing element
// from anotherinstead of adding two existing elements
}]
[0045] 表5のexpand()関数は、既存のエントリに基づいて、新しい演算を追加することによって、ディクショナリを拡張しようとする。図6(604において)述べたように、ディクショナリは、その値が1であるベースエントリを持つように初期化され、これは、演算するための1つのエントリを与えることによって、表5のexpand()関数を“ブートストラップする”。次に、辞書の任意の状態があるとして、expand()関数は、以下のようにすることによって、ディクショナリに対して、新しいエントリを加えようとする:すなわち、
・ディクショナリ中の各エントリに対して、expand()は、エントリを左シフトする新しい演算を加えようとする。したがって、ディクショナリ中に、1の値を持つエントリがある場合、expand()は、その値を、1,2,3,・・・ビットだけ、左にシフトする演算を加えようとする。捜されている値の“最大ビット長max_bit_length”があるかもしれず(例えば、プロセスは、10、または、より少ない最上位ビットを持つ値に対してルックするようにセットされていてもよく)、forループ条件“k=1 to (max_bit_length − msb_position_of(i.value))”は、expand()が“最大ビット長 max_bit_length”を超えて、確実に、最上位ビットをシフトしないようにする。
・ディクショナリの各個別のエントリ対に対して、expand()は、エントリ対中の値を加算する新しい演算を加えようとする。
・ディクショナリの各個別のエントリ対に対して、expand()は、1つのエントリ中の値を、もう1つのエントリの値から、減算する新しい演算を加えようとする。
新しいエントリを追加するための試みが行われた後、expand()は、さまざまなテストを実行する:すなわち、
・追加されたエントリが、ディクショナリ中に既に見られる値を複製する場合、ディクショナリが、同じ値に対する2つの別個のパスを含まないように、追加されたエントリは除去される。(追加されたエントリが、ディクショナリの“トップ”にあるので、この除去は、トップエントリを除去することによって達成される。)
・追加されたエントリが、既存の値を複製しない場合、ディクショナリエントリ中の1組の値が、捜されている1組の係数に比較される。エントリの追加後に、ディクショナリがまだ、捜されているすべての係数を含んでいない場合、expand()は、それ自身を再帰的に呼び出し、ディクショナリにより多くの値を追加する。再帰的な呼出の後で、expand()は、再帰的呼出の前に追加されたエントリを除去する。この除去は、ディクショナリによって、表現される演算のスタックを、再帰的呼出が戻るにつれて、アンワインドさせる。
・追加された新しい値が、捜されている全ての係数をディクショナリが含むことにさせる場合、expand()は、ディクショナリの現在の状態が、新しいアルゴリズムとして保存されることになるか、否かを決定する。expand()は、現在のアルゴリズムが、既に保存されている、他のアルゴリズムと少なくとも同じくらい効率的であるか否かを決定する。(他のアルゴリズムが何もない場合、現在のアルゴリズムは、最も効率的であるとされ、保存される。)効率性は、何らかの値に到達するのにアルゴリズムが使用する最長パス長(すなわち、演算の数)を決定することのような、さまざまなアルゴリズム基準によって決定できる。] 図6
[0046] 以下は、ここで主題が配備されてもよい例示的な環境の説明である。]
[0047] 図7を参照して、ハンドセットのような、ワイヤレスデバイスまたは端末700の、潜在的な構成の概念ブロック図を図示する。当業者が理解することになるように、端末700の構成は、特定のアプリケーション、全体の設計制約等のような要因に依拠して、異なっていてもよい。プロセッサ702は、ここで開示するシステムと方法を実現できる。] 図7
[0048] 端末700は、アンテナ706に結合されたフロントエンドトランシーバ704とともに実現されることができる。フロントエンドトランシーバ704は、データ通信を受信するように構成されている。ベースバンドプロセッサ708は、トランシーバ704に結合されることができる。ベースバンドプロセッサ708は、ソフトウェアベースのアーキテクチャ、または、他のタイプのアーキテクチャで実現されることができる。他の機能のうちでも、制御と全体のシステム管理機能を提供する、ソフトウェアプログラムを実行するときにマイクロプロセッサを利用できる。デジタルシグナルプロセッサ(“DSP”)組み込み通信ソフトウェアレイヤで実現されることができ、これは、アプリケーション特有のアルゴリズムを実行して、マイクロプロセッサ上での処理要求を減少させる。DSPを利用して、パイロット信号捕捉、時間同期、周波数追跡、拡散スペクトラム処理、変調と復調機能、フォワードエラー訂正のような、さまざまな信号処理機能を提供できる。]
[0049] 端末700はまた、ベースバンドプロセッサ708に結合された、さまざまなユーザインターフェース710も含むことができる。ユーザインターフェース710は、キーパッド、マウス、タッチスクリーン、ディスプレイ、リンガー、バイブレータ、オーディオスピーカ、マイクロフォン、カメラ、および/または、他の入力出力デバイスを含むことができる。]
[0050] ベースバンドプロセッサ708は、プロセッサ702を含む。ベースバンドプロセッサ708のソフトウェアベースの実現では、プロセッサ702は、マイクロプロセッサ上で実行されているソフトウェアプログラムであってもよい。しかしながら、プロセッサ702は、この実現に制限されておらず、ここで記述したさまざまな機能を実行することができる、ハードウェア構成、ソフトウェア構成、または、これらの組み合わせを含む、技術的に知られているさまざまな手段によって実現されてもよい。プロセッサ702は、データ記憶のためにメモリ712に結合されることができる。メモリ712は、製造および/またはテストプロセスの間に受信されたプログラムデータを記憶するように構成されており、プロセッサ702または708は、プログラムデータでプログラムされるように構成されている。]
[0051] ここで説明する実施形態は、ハードウェア、ソフトウェア、フォームウェア、ミドルウェア、マイクロコード、または、これらの任意の組み合わせによって実現されてもよい。システムおよび/または方法が、ソフトウェア、フォームウェア、ミドルウェア、または、マイクロコード、プログラムコードもしくはコードセグメントにおいて実現されるとき、これらは、ストレージコンポーネントのような機械読取可能媒体中に記憶されてもよい。コードセグメントは、手続、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または、命令、データ構造、もしくは、プログラムセグメントの何らかの組み合わせを表してもよい。コードセグメントは、情報、データ、引数、パラメータ、または、メモリコンテンツを送ることおよび/または受け取ることによって、別のコードセグメント、または、ハードウェア回路に結合されてもよい。情報、引数、パラメータ、データ等は、メモリ共有、メッセージ送信、トークンパッシング、ネットワーク送信等を含む任意の適切な手段を使用して、送出されてもよく、送られてもよく、送信されてもよい。]
[0052] ソフトウェア実現に関しては、ここで説明した技術を、ここで説明した機能を実行するモジュール(例えば、手続、関数等)で実現してもよい。ソフトウェアコードは、メモリユニット中に記憶されてもよく、プロセッサによって実行されてもよい。メモリユニットは、プロセッサ内で実現されてもよく、または、プロセッサ外部で実現されてもよい。外部のケースでは、メモリユニットは、技術的に知られているさまざまな手段を通してプロセッサに通信可能に結合されることができる。]
[0053] ここで開示した実施形態と関連して述べた方法またはアルゴリズムのステージを、直接、ハードウェアで、プロセッサにより実行されるソフトウェアモジュールで、あるいは、2つの組み合わせで具体化してもよい。ソフトウェアモジュールは、ランダムアクセスメモリ(“RAM”)メモリ、フラッシュメモリ、読出専用メモリ(“ROM”)メモリ、消去可能プログラム可能ROM(“EPROM”)メモリ、電気的消去可能プログラム可能ROM(“EEPROM”)メモリ、レジスタ、ハードディスク、リムーブバルディスク、CD−ROM、あるいは、技術的に知られている他の何らかの形態の記憶媒体に存在していてもよい。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替実施形態では、記憶媒体はプロセッサと一体化されてもよい。プロセッサおよび記憶媒体は、ASICに存在してもよい。ASICはユーザ端末に存在してもよい。代替実施形態では、プロセッサおよび記憶媒体は、ユーザ端末中のディスクリートコンポーネントとして存在してもよい。]
[0054] ここで説明した方法は、当業者のうちの1人によって知られている、さまざまなハードウェア、プロセッサ、および、システム上で実現されてもよいことに留意すべきである。例えば、実現において使用される機械は、コンテンツと情報を表示するディスプレイ、クライアントの動作を制御するプロセッサ、および、機械の動作に関係するデータとプログラムを記憶するメモリを有していてもよい。何らかの実現では、機械はセルラ電話機である。何らかの実現では、機械は手持ちコンピュータ、または、通信能力を有するハンドセットである。別の実現では、機械は、通信能力を有するパーソナルコンピュータである。]
[0055] ここで説明する実施形態に関連して説明する、さまざまな例示的なロジックブロック、モジュール、回路、エレメント、および/または、コンポーネントは、汎用プロセッサ、DSP、ASIC、フィールドプログラム可能ゲートアレイ(FPGA)または他のプログラム可能ロジックデバイス、ディスクリートゲートまたはトランジスタロジック、ディスクリートハードウェア構成部品、あるいは、ここで説明する機能を実現するように設計されているこれらの任意の組み合わせとともに実現、または、実行してもよい。汎用プロセッサは、マイクロプロセッサであってもよいが、代わりに、プロセッサは、任意の従来のプロセッサ、制御装置、マイクロ制御装置、または、状態機械であってもよい。プロセッサはまた、計算デバイスの組み合わせとして、例えば、DSPとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、DSPコアと連携した1つ以上のマイクロプロセッサ、または、他の何らかのこのような構成として、実現されてもよい。]
[0056] 主題を構造的な特徴および/または方法的動作に特有の言語において説明してきたが、特許請求の範囲において規定する主題は、上に説明する特定の特徴または動作に限定される必要はないことが理解されるだろう。むしろ、上に説明した特定の特徴と動作は、特許請求の範囲を実現する例示的な形態として開示した。]
权利要求:

請求項1
画像を処理する方法において、画像中の第1のピクセルのカラーと、前記カラーに基づいてカラーパレットから選択されたカラー値との間の差に基づいて、誤差を計算することと、1つ以上のシフト、加算、または、減算の演算、あるいは、これらの組み合わせを使用することによって、前記誤差と、フィルタ中の複数の重みのそれぞれとの第1の積を計算することと、前記フィルタにしたがって、複数の第2のピクセルに対して、前記第1の積を分配することとを含み、前記複数の重みのそれぞれは2進分数である方法。
請求項2
前記重みのそれぞれは、分子と分母によって表現され、前記誤差と、前記重みのそれぞれとの前記第1の積の前記計算は、前記分子のそれぞれと、前記誤差との第2の積を計算することと、前記第2の積と、前記分母とに基づいて商を計算することとを含む、請求項1記載の方法。
請求項3
前記第2の積の前記計算は、乗算命令を使用することなく、シフト、加算、および、減算の演算を使用して実行される、請求項2記載の方法。
請求項4
前記商の前記計算は、除算命令を使用することなく、前記第2の積への右シフト演算を使用して実行される、請求項2記載の方法。
請求項5
前記フィルタ中の重みは、Floyd−Steinbergフィルタ、Jarvis−Judice−Ninkeフィルタ、Stuckiフィルタ、Burkesフィルタ、または、Sierra3フィルタから導出される重みを近似する2進分数である、請求項1記載の方法。
請求項6
画像を処理する方法を実行するための実行可能命令を備える1つ以上のコンピュータ読取可能媒体において、前記方法は、画像中の第1のピクセルのカラーと、前記カラーに基づいてカラーパレットから選択されたカラー値との間の差に基づいて、誤差を計算することと、1つ以上のシフト、加算、または、減算の演算、あるいは、これらの組み合わせを使用することによって、前記誤差と、フィルタ中の複数の重みのそれぞれとの第1の積を計算することと、前記フィルタにしたがって、複数の第2のピクセルに対して、前記第1の積を分配することとを含み、前記複数の重みのそれぞれは2進分数である、1つ以上のコンピュータ読取可能媒体。
請求項7
前記重みのそれぞれは、分子と分母によって表現され、前記誤差と、前記重みのそれぞれとの前記第1の積の前記計算は、前記分子のそれぞれと、前記誤差との第2の積を計算することと、前記第2の積と、前記分母とに基づいて商を計算することとを含む、請求項6記載の1つ以上のコンピュータ読取可能媒体。
請求項8
前記第2の積の前記計算は、乗算命令を使用することなく、シフト、加算、および、減算の演算を使用して実行される、請求項7記載の1つ以上のコンピュータ読取可能媒体。
請求項9
前記商の前記計算は、除算命令を使用することなく、前記第2の積への右シフト演算を使用して実行される、請求項7記載の1つ以上のコンピュータ読取可能媒体。
請求項10
画像を処理する装置において、画像を受信するインターフェースと、少なくとも1つのプロセッサと、前記プロセッサに結合され、または、前記プロセッサと一体化されているメモリとを具備し、前記少なくとも1つのプロセッサは、ロジックを実行して、画像中の第1のピクセルのカラーと、前記カラーに基づいてカラーパレットから選択されたカラー値との間の差に基づいて、誤差を計算し、1つ以上のシフト、加算、または、減算の演算、あるいは、これらの組み合わせを使用することによって、前記誤差と、フィルタ中の複数の重みのそれぞれとの第1の積を計算し、前記フィルタにしたがって、複数の第2のピクセルに対して、前記第1の積を分配し、前記複数の重みのそれぞれは2進分数であり、前記ロジックは、前記メモリ中に記憶されている装置。
請求項11
前記重みのそれぞれは、分子と分母によって表現され、前記ロジックは、前記分子のそれぞれと、前記誤差との第2の積を計算することと、前記第2の積と、前記分母とに基づいて商を計算することとによって、前記誤差と、前記重みのそれぞれとの前記第1の積を計算する、請求項10記載の装置。
請求項12
前記ロジックは、乗算命令ではなく、シフト、加算、および、減算の演算を使用して、前記第2の積を計算する、請求項11記載の装置。
請求項13
前記ロジックは、前記第2の積への、除算命令ではなく、右シフト演算を使用して、前記商を計算する、請求項11記載の装置。
請求項14
前記フィルタ中の重みは、Floyd−Steinbergフィルタ、Jarvis−Judice−Ninkeフィルタ、Stuckiフィルタ、Burkesフィルタ、または、Sierra3フィルタから導出される重みを近似する2進分数である、請求項10記載の装置。
請求項15
前記装置はハンドセットである、請求項10記載の装置。
請求項16
前記装置は集積回路である、請求項10記載の装置。
請求項17
画像を処理する装置において、画像中の第1のピクセルのカラーと、前記カラーに基づいてカラーパレットから選択されたカラー値との間の差に基づいて、誤差を計算する手段と、1つ以上のシフト、加算、または、減算の演算、あるいは、これらの組み合わせを使用することによって、前記誤差と、フィルタ中の複数の重みのそれぞれとの第1の積を計算する手段と、前記フィルタにしたがって、複数の第2のピクセルに対して、前記第1の積を分配する手段とを具備し、前記複数の重みのそれぞれは2進分数である装置。
請求項18
前記重みのそれぞれは、分子と分母によって表現され、前記誤差と、前記重みのそれぞれとの前記第1の積を計算する前記手段は、前記分子のそれぞれと、前記誤差との第2の積を計算する手段と、前記第2の積と、前記分母とに基づいて商を計算する手段とを備える、請求項17記載の装置。
請求項19
前記第2の積を計算する前記手段は、シフト、加算、および、減算の演算を実行する手段を備える、請求項18記載の装置。
請求項20
前記商を計算する前記手段は、前記第2の積への右シフト演算を実行する手段を備える、請求項18記載の装置。
請求項21
ディザリング重みの計算を容易にする方法を実行する実行可能な命令を備える1つ以上のコンピュータ読取可能媒体において、前記方法は、複数の係数を受け取ることと、ベース値を有する第1のエレメントを含むように、配列を初期化することと、前記配列を、複数の第2のエレメントで埋めることと、1つ以上の基準に基づいて、前記配列のコンテンツが、1組の保存されているアルゴリズムに追加されることになるか、決定を行うこととを含み、前記複数の第2のエレメントは、それぞれ、(a)値と、(b)前記値を導出するために、前記配列中の1つ以上の他のエレメント上で実行されることになる演算の表示とを含み、前記演算は、2つのエレメントの値を加算すること、1つのエレメントの値を別のエレメントから減算すること、または、1つのエレメントの値をあるビット数左シフトすることのうちのいずれかであり、前記1つ以上の基準は、前記係数のそれぞれが前記配列のエレメント中の値のうちに見つけられるという状態に前記配列があることを含む、コンピュータ読取可能媒体。
請求項22
前記1つ以上の基準は、前記配列が、前記1組の保存されているアルゴリズム中の、他の1つ以上のアルゴリズムに関して複雑さ基準を満たすアルゴリズムを表現していることをさらに含む、請求項21記載のコンピュータ読取可能媒体。
請求項23
前記複雑さ基準は、前記配列が、前記係数の任意のものを計算するのに使用する演算の最大数は、前記保存されているアルゴリズムのうちの任意のものが、前記係数を計算するのに使用する係数の最大数より少なく、または、前記係数の最大数に等しいことを含む、請求項21記載のコンピュータ読取可能媒体。
請求項24
前記埋めることは、前記配列中の既存のエレメント上の第1の演算を作成することと、前記第1の演算が、前記係数のうちにあるが、前記配列の他のエレメントのうちにない値を発生させるか、決定することと、前記第1の演算と、前記第1の演算からもたらされる値とを前記エレメント中に保存することと、少なくとも1つの終了条件下になるまで、前記作成、決定、および、保存を、再帰的に繰り返すこととを含む、請求項21記載のコンピュータ読取可能媒体。
請求項25
前記係数はフィルタ中の重みであり、前記方法は、前記保存されているアルゴリズムのうちの1つを使用して、拡散ディザリングプロセス中で、ピクセル誤差に対して前記重みを適用することを含む、請求項21記載のコンピュータ読取可能媒体。
类似技术:
公开号 | 公开日 | 专利标题
EP3402180A1|2018-11-14|Blurred photo generation method and apparatus, and mobile terminal
JP4955182B2|2012-06-20|整数の計算フィールド範囲の拡張
US7962540B2|2011-06-14|Mixed radix number generator with chosen statistical artifacts
Shieh et al.2008|A new modular exponentiation architecture for efficient design of RSA cryptosystem
Gustafsson2007|A difference based adder graph heuristic for multiple constant multiplication problems
KR100594073B1|2006-07-03|내장형 시스템의 디지털 영상 스케일링방법
US5809178A|1998-09-15|Elimination of visible quantizing artifacts in a digital image utilizing a critical noise/quantizing factor
JP2960781B2|1999-10-12|グラフィックイメージの処理においてブレンド値を効率的に決定するためのシステム及び方法
JP4067818B2|2008-03-26|楕円曲線暗号装置、楕円曲線暗号プログラム及び楕円曲線暗号の演算方法
JP4302640B2|2009-07-29|被乗数のシフトを用いて乗算を計算するための装置およびその方法、上記装置を実行するためのプログラムコードを格納した記録媒体
KR20120099713A|2012-09-11|장면 내에서의 정확한 피사체 거리 및 상대적인 피사체 거리를 추정하는 알고리즘
US20050177607A1|2005-08-11|Method and apparatus for effectively performing linear transformations
US7945784B1|2011-05-17|Method and system to perform secret sharing
JP3584053B2|2004-11-04|複合オペランド内の多ビット要素を選択するためのマスク
US9020296B2|2015-04-28|Image conversion apparatus, method, and storage medium
Kumm et al.2012|Pipelined adder graph optimization for high speed multiple constant multiplication
EP0513516A2|1992-11-19|Apparatus for and method of reducing a digital image
US8565554B2|2013-10-22|Resizing of digital images
CA2369537C|2013-07-23|Method and apparatus for performing finite field calculations
US20040139133A1|2004-07-15|Apparatus and method for immediate non-sequential state transition in a PN code generator
KR20040041781A|2004-05-20|메모리를 감소시키는 개선된 룩업 테이블 압축방법 및이를 이용하여 압축된 룩업 테이블을 가지는 비선형 함수발생장치 및 그 발생방법
Ramírez et al.2002|Fast RNS FPL-based communications receiver design and implementation
KR100393608B1|2003-08-09|유.엠.티.에스시스템내 터보부호화기의 내부 인터리버 및인터리빙 수행 방법
JP2004280103A|2004-10-07|モンゴメリー類型のモジュラー乗算装置及び方法
US9569822B2|2017-02-14|Removing noise from an image via efficient patch distance computations
同族专利:
公开号 | 公开日
US8248660B2|2012-08-21|
CN101946501A|2011-01-12|
EP2071824A1|2009-06-17|
KR20120130267A|2012-11-29|
JP5102367B2|2012-12-19|
US20090153907A1|2009-06-18|
KR20100092970A|2010-08-23|
TW200939737A|2009-09-16|
WO2009079370A1|2009-06-25|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2012-01-25| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120124 |
2012-04-24| A601| Written request for extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20120423 |
2012-05-02| A602| Written permission of extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20120501 |
2012-05-25| A601| Written request for extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20120524 |
2012-06-01| A602| Written permission of extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20120531 |
2012-06-26| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120625 |
2012-08-20| TRDD| Decision of grant or rejection written|
2012-08-29| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120828 |
2012-08-30| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 |
2012-10-04| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120927 |
2012-10-05| FPAY| Renewal fee payment (event date is renewal date of database)|Free format text: PAYMENT UNTIL: 20151005 Year of fee payment: 3 |
2012-10-05| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 |
2015-10-13| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2016-10-11| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2017-10-05| LAPS| Cancellation because of no payment of annual fees|
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]